package modelo;

import java.util.List;

import javax.swing.table.AbstractTableModel;

import entidad.Ciclo;

import manejador.ManejadorDeCiclo;
import interfaz.IEntidad;

public class ModeloCiclo extends AbstractTableModel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String[] encabezados = null;
	private List<IEntidad> ciclos = null;
	private static ModeloCiclo instancia = null;
	private Ciclo ciclo = null;
	private ManejadorDeCiclo manejadorDeCiclo = null;
	private String parametro = "ACTIVO";

	private ModeloCiclo() {
		encabezados = new String[] { "ID Ciclo", "Descripcion", "Fecha Inicio",
				"Fecha Termino", "Estatus" };
		manejadorDeCiclo = ManejadorDeCiclo.getInstancia();
		ciclos = manejadorDeCiclo.getEntidadDinamica(this.getParametro());

	}

	public static ModeloCiclo getInstancia() {
		if (instancia == null) {
			instancia = new ModeloCiclo();
		}
		return instancia;
	}

	public String getColumnName(int indice) {
		return encabezados[indice];
	}

	@Override
	public int getColumnCount() {

		return encabezados.length;
	}

	@Override
	public int getRowCount() {
		return ciclos.size();
	}

	@Override
	public Object getValueAt(int fila, int columna) {
		String retorno = "";
		ciclo = (Ciclo) manejadorDeCiclo
				.getEntidadDinamica(this.getParametro()).get(fila);
		switch (columna) {
		case 0:
			retorno = String.valueOf(ciclo.getIdCiclo());
			break;
		case 1:
			retorno = ciclo.getDescripcion();
			break;
		case 2:
			retorno = String.valueOf(ciclo.getFechaInicio());
			break;
		case 3:
			retorno = String.valueOf(ciclo.getFechaTermino());
			break;
		case 4:
			retorno = String.valueOf(ciclo.getStatus());
			break;
		}
		return retorno;
	}

	public void agregar(Ciclo ciclo) {
		manejadorDeCiclo.agregar(ciclo);
		ciclos = manejadorDeCiclo.getEntidadDinamica(this.getParametro());
		fireTableDataChanged();
	}

	public void eliminar(int fila) {
		ciclos = manejadorDeCiclo.getEntidadDinamica(this.getParametro());
		fireTableRowsDeleted(fila, fila);
	}

	public void modificar(Ciclo ciclo, int id) {
		manejadorDeCiclo.modificar(ciclo, id);
		ciclos = manejadorDeCiclo.getEntidadDinamica(this.getParametro());
		fireTableDataChanged();
	}

	public void actualizarTableParametros(String parametro) {
		this.setParametro(parametro);
		ciclos = manejadorDeCiclo.getEntidadDinamica(this.getParametro());
		fireTableDataChanged();

	}

	public void cambiarEstatus(int id) {
		manejadorDeCiclo.cambiarEstatus(id);
		ciclos = manejadorDeCiclo.getEntidadDinamica(this.getParametro());
		fireTableDataChanged();
	}

	public String getParametro() {
		return parametro;
	}

	public void setParametro(String parametro) {
		this.parametro = parametro;
	}

	public void actualizarTabla() {
		ciclos = manejadorDeCiclo.getEntidad();
		fireTableDataChanged();
	}

}
